package com.gimi.cloud.jimi.commonService.util;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



/**
 * 位置相关工具类
 * @author wbj
 * @date 2016年12月16日
 */
public class APILocationUtil {
	private static final Logger log = LoggerFactory.getLogger(APILocationUtil.class);

	
	/**
	 * 根据LBS获取地理位置
	 * <p>http://api.map.baidu.com/geocoder/v2/</p>
	 * @param longitude 经度
	 * @param latitude 纬度
	 * @param showLog 是否显示日志信息
	 * @return 获取结果
	 */
	public static String getAddressByLBS(String longitude,String latitude,boolean showLog){
		if(null == longitude || null == latitude){
			log.error("获取LBS位置信息错误，原因：未传递经纬度");
			return "";
		}
		Map<String,String> params = new HashMap<String,String>();
		params.put(":latitude", ""+latitude);
		params.put(":longitude", ""+longitude);
		String result = APIHttpClientUtil.getResultByApiConfig("lbs_location", params, null, showLog);
		if(showLog) log.info("经度："+longitude+",纬度："+latitude+" 的地址定位为："+result);
		return result;
	}
	
	/**
	 * 根据IP地址获取归属地(国省市区)
	 * @see <a href="http://apistore.baidu.com/apiworks/servicedetail/114.html">http://apistore.baidu.com/apiworks/servicedetail/114.html</a>
	 * @APIUrl <a href="http://apis.baidu.com/apistore/iplookupservice/iplookup">http://apis.baidu.com/apistore/iplookupservice/iplookup</a>
	 * @param ip 待查询的ip地址
	 * @param showLog 是否显示日志
	 * @return 查询结果
	 */
	public static String getAddressByIp(String ip,boolean showLog){
		if(StringUtils.isBlank(ip)){
			log.error("获取ip归属地错误，原因：未传递ip地址");
			return "";
		}
		/**
		 * 局域网
		 * 10.0.0.0~10.255.255.255（A类）
		 * 172.16.0.0~172.31.255.255（B类）
		 * 192.168.0.0~192.168.255.255（C类）
		 */
		if("127.0.0.1".equals(ip) || ip.indexOf("192.168") ==0 || ip.indexOf("10.") == 0){
			return "本地局域网";
		}
		Map<String,String> params = new HashMap<String,String>();
		params.put(":ip", ip);
		String result = APIHttpClientUtil.getResultByApiConfig("ip_location", params, null, showLog);
		if(showLog) log.info("IP："+ip+"的地址定位为："+result);
		return result;
	}
	
	/**
	 * 根据身份证号获取身份证归属地
	 * @param cardId 身份证号码
	 * @param showLog 是否显示日志
	 * @return 查询结果
	 */
	public static String getAddressByCardId(String cardId,boolean showLog){
		//身份证未空，或者
		if(StringUtils.isBlank(cardId) || cardId.length() !=18){
			log.error("获取身份证归属地错误，原因：未传入身份证号码或者身份证号码不符合18位长度！");
			return "";
		}
		if(NumberUtils.isNumber(cardId.substring(0,17))){
			Map<String,String> params = new HashMap<String,String>();
			params.put(":cardId", cardId);
			String result = APIHttpClientUtil.getResultByApiConfig("cardid_api", params, null, showLog);
			if(showLog) log.info("cardId："+cardId+"的地址定位为："+result);
			return result;
		}
		return "";
	}
}
